#!/bin/bash
# 导入配置文件

if [ ! -e ./conf/config.sh ]
then
	echo "请配置config.sh文件"
else
	. ./conf/config.sh
fi

#路径，分支名, 项目名，项目地址
gitPack(){
	# 目录不存在-新建
	branch="$branch_dir/$3_$2.txt"
	branch_project="$branch_dir"

	if [ ! -e $1 ]
	then
		mkdir $1
	fi

	if [ ! -e $branch ]
	then
		cd $1
		# 初始化
		touch $branch
		git clone $4 .
		# 初始化子库
		git submodule update --init --recursive
		# 切换分支名
		git fetch
		git checkout . && git clean -xdf
		git checkout -b $2 origin/$2
		git pull origin $2
		git submodule init
		git submodule update
		git branch > $branch
		# 判断当前分支
		isE=0
		cd $branch_project
		var=`cat $branch`
		for line in `cat $branch`
		do
			if [ $line = $2 ]
			then
				#存在这个分支
				isE=1
			fi
		done
		cd $1
		if [ $isE == 0 ]
		then
			#分支不存在
			rm $branch
		else
			#记录当前提交节点
			git rev-parse HEAD > $branch
		fi
		currentId=`getCommitId $1`
		echo "打包$2：">>$log_file
		echo "提交点: $currentId" >> $log_file
		# 打包当前分支
		packOne $1 $2 $currentId $3
    else
    	cd $1
    	git fetch
		git checkout $2
		#读取旧版本的提交号
		oldId=`getCommitId $1` >> $log_file # todo 只能返回int;全局解决
		#oldId="0d6b8248a987e0ed03c7c30bb57fdaf067860f1c"
		echo "打包$2：">>$log_file
		echo "旧提交点: $oldId" >> $log_file
		git pull >> $log_file
		git submodule init >> $log_file
		git submodule update >> $log_file
		#读取新版本的提交号
		newId=`getCommitId $1` >> $log_file
		#newId="cde311c321aebfa1bc8cefa25226b3a6cc9f44c9"
		echo "新提交点: $newId" >> $log_file
		#找出新旧版本号的不同点并打包
		if [ $oldId != $newId ]
		then
			packDiff $1 $2 $oldId $newId $3
			#记录当前提交节点
			git rev-parse HEAD > $branch
		else
			echo "分支无变化无需打包"
		fi
	fi
	cd $root
}
#打包当前分支 1项目地址 2分支名 3分支点
packOne(){
	cd $1
	# 缓存当前git
	cp $gitignore \.gitignore
	# 生效
	git rm -r --cached . >> $log_file
	# 假提交
	git add . >> $log_file
	git commit -m "temp" >> $log_file
	# 打包
	zip="$pack_time_dir/$4_$2_$3.zip"
	git archive --format zip --output $zip $2 >> $log_file
	# 重置提交
	git reset --hard "origin/$2" >> $log_file

	echo "生成目录："$zip
}
#两版本不同文件打包 1项目地址 2当前分支名 3分支点 4分支点
packDiff(){
	cd $1
	# 缓存当前git
	cp $gitignore \.gitignore
	# 生效
	git rm -r --cached . >> $log_file
	# 假提交
	git add . >> $log_file
	git commit -m "temp" >> $log_file
	# 打包
	zip="$pack_time_dir/$5_$2_$3_$4.zip"
	#比较两个版本之间的差异文件，生成一个差异文件压缩包
	#git archive develop $( git diff $3 $4 --name-only)|gzip > $zip #比较两个版本之间的差异文件，生成一个差异文件压缩包
	git diff $3 $4 --name-only | xargs zip $zip >> $log_file
	# 重置提交
	git reset --hard "origin/$2" >> $log_file

	echo "生成目录："$zip
}
#两分支不同文件打包 1分支点 2分支点  不同分支对比~~~！！！警告没有忽略相应文件的，需要检查
packDiffBranch(){
echo $1 $2 $3 $4
	projet_path="${project_dir}/$1"
	cd $projet_path
	if [ ! -e $projet_path ]
	then
		mkdir $projet_path
		packNew $1 master
		git branch
	fi
	cd $projet_path
	# 打包
	git fetch origin
	git reset --hard HEAD
	git checkout -b $3_$4
	git pull origin $4
	zip="$pack_time_dir/$1_$2_$3.zip"
	echo "打包$1不同分支：" >> $log_file
	echo "分支：$2" >> $log_file
	echo "分支：$3" >> $log_file
#	oldId="0d6b8248a987e0ed03c7c30bb57fdaf067860f1c"
#	newId="cde311c321aebfa1bc8cefa25226b3a6cc9f44c9"
	#比较两个版本之间的差异文件，生成一个差异文件压缩包
	#git archive develop $( git diff $3 $4 --name-only)|gzip > $zip #比较两个版本之间的差异文件，生成一个差异文件压缩包
	git diff $2 $3 --name-only | xargs tar -czvf $zip
	echo "！！警告没有忽略相应文件的，需要检查去掉"
	git branch
	cd $root
}

#获取当前版本号 1项目地址
getCommitId()
{
	cd $1
	#记录当前提交节点
	git rev-parse HEAD >> $temp
	tempId=0
	for line in `cat $temp`
		do
			echo $line
			tempId=$line
	done
	cd $root
	return $tempId
}

# 可运行的功能
case "$1" in
	pack)
		packNew ${*:2}
		;;
	packDiffBranch)
		packDiffBranch ${*:2}
		;;
	*)
		echo "Usage: $0 {pack 项目名 分支名|packDiffBranch 项目名 提交点1 提交点2 分支3}" >&2
		exit 3
		;;
esac

